package linhz.demo01.Lambda;

import java.util.Arrays;
import java.util.Comparator;

/**
 * Lambda 的使用前提
 * 1、使用Lambda必须具有接口，且要求接口中有且仅有一个抽象方法。
 * 无论是JDK内置的Runnable、Comparator接口还是自定义的接口，只有当接口中的抽象方法存在且唯一时，才可以使用Lambda。
 * 2、使用Lambda必须具有上下文推断。
 * 也就是方法的参数或局部变量类型必须为Lambda对应的接口类型，才能使用Lambda作为该接口的实例。
 * 备注：有且仅有一个抽象方法的接口，称为“函数式接口”。
 *
 * 1(参数列表)：括号中参数列表的数据类型，可以省略不写
 * 2（参数列表）：括号中的参数只有一个，那么类型和（）都可以省略
 * 3（一些代码）：如果（）中的代码只有一行，无论是否有返回值，都可以省略{}，return,分号
 *              备注：要省略就一起省略
 *
 */





public class demo01Arrays {
    public static void main(String[] args) {
        Person[] arr = {
                new Person("aa", 16),
                new Person("bb", 17),
                new Person("cc", 11)
        };
        Arrays.sort(arr, (Person o1, Person o2) -> {
            return o2.age-o1.age;
        });
        Arrays.sort(arr,((o1, o2) -> o2.age-o1.age));

//        Arrays.sort(arr, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o2.age- o1.age;
//            }
//        });
        for (Person person : arr) {
            System.out.println(person.name+":"+person.age);
        }
        System.out.println(arr.toString());
    }
}
